﻿/*
 * 设计一个C#程序，将左下三角形矩阵压缩为一维数组
 */

using static System.Console;

const int ARRAY_SIZE = 5; // 矩阵的维数大小
// 下三角矩阵的内容
int[,] A =
{
    { 76, 0, 0, 0, 0 },
    { 54, 51, 0, 0, 0 },
    { 23, 8, 26, 0, 0 },
    { 43, 35, 28, 18, 0 },
    { 12, 9, 14, 35, 46 },
};

// 一维数组的数组声明
int[] B = new int [ARRAY_SIZE * (1 + ARRAY_SIZE) / 2];

int GetValue(int i, int j)
{
    int index = ARRAY_SIZE * i - i * (i + 1) / 2 + j;
    return B[index];
}

void SetToArray()
{
    int i = 0;
    int j = 0;
    Write("=========\n");
    Write("下三角形矩阵：\n");
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        for (j = 0; j < ARRAY_SIZE; j++)
        {
            Write($"\t{A[i, j]}");
        }

        WriteLine();
    }

    // 将左下三角形矩阵压缩为一维数组
    int index = 0;
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        for (j = 0; j < ARRAY_SIZE; j++)
        {
            if (A[i, j] != 0)
                B[index++] = A[i, j];
        }
    }

    Write("=========\n");
    Write("以一维的方式表示\n");

    Write("\t[");
    for (i = 0; i < ARRAY_SIZE; i++)
    {
        for (j = i; j < ARRAY_SIZE; j++)
        {
            Write($"{GetValue(i, j)}");
        }
    }

    Write(" ]");
    WriteLine();
    ReadKey();
}